import java.util.Scanner;

public class aaa_基础{
    public static void main(String[] args){

        System.out.println("\n-----数据类型-----");
        // 8种基本数据类型
        byte byteVar = 127;                 // -128 到 127
        short shortVar = 32767;             // -32768 到 32767
        int intVar = 2147483647;           // -2^31 到 2^31-1
        long longVar = 9223372036854775807L; // -2^63 到 2^63-1
        float floatVar = 3.14f;            // 单精度浮点数
        double doubleVar = 3.14159;        // 双精度浮点数
        boolean boolVar = true;            // true 或 false
        char charVar = 'A';                // 单个字符
      
        System.out.println("byte值: " + byteVar);
        System.out.println("short值: " + shortVar);
        System.out.println("int值: " + intVar);
        System.out.println("long值: " + longVar);
        System.out.println("float值: " + floatVar);
        System.out.println("double值: " + doubleVar);
        System.out.println("boolean值: " + boolVar);
        System.out.println("char值: " + charVar);

        System.out.println("\n-----数组-----");
        // 数组定义和使用
        int[] numbers = {1, 2, 3, 4, 5};
        
        // 普通for循环遍历数组
        System.out.print("普通for循环遍历: ");
        for (int i = 0; i < numbers.length; i++) {
            System.out.print(numbers[i] + " ");
        }
        System.out.println();
        
        // 增强型for循环（for-each）
        System.out.print("for-each循环遍历: ");
        for (int number : numbers) {
            System.out.print(number + " ");
        }
        System.out.println();

        System.out.println("\n-----switch语句-----");
        int day = 3;
        switch (day) {
            case 1:
                System.out.println("星期一");
                break;
            case 2:
                System.out.println("星期二");
                break;
            case 3:
                System.out.println("星期三");
                break;
            default:
                System.out.println("其他日子");
        }

        System.out.println("\n-----运算符-----");
        int x = 10;
        int y = 3;
        
        // 算术运算符
        System.out.println("加法: " + (x + y));    // 13
        System.out.println("减法: " + (x - y));    // 7
        System.out.println("乘法: " + (x * y));    // 30
        System.out.println("除法: " + (x / y));    // 3
        System.out.println("取余: " + (x % y));    // 1
        
        // 关系运算符
        System.out.println("x > y: " + (x > y));   // true
        System.out.println("x == y: " + (x == y)); // false
        
        // 逻辑运算符
        boolean p = true;
        boolean q = false;
        System.out.println("逻辑与: " + (p && q)); // false
        System.out.println("逻辑或: " + (p || q)); // true
        System.out.println("逻辑非: " + (!p));     // false

        System.out.println("\n-----do-while循环-----");
        // do-while循环：先执行一次，再判断条件
        int count = 0;
        do {
            System.out.print(count + " ");
            count++;
        } while (count < 3);
        System.out.println();

        System.out.println("\n-----三元运算符-----");
        // 三元运算符：条件 ? 真值 : 假值
        int max = (x > y) ? x : y;
        System.out.println("较大值: " + max);
        
        String result = (x % 2 == 0) ? "偶数" : "奇数";
        System.out.println(x + "是: " + result);

        System.out.println("\n-----类型转换-----");
        // 自动类型转换（小到大）
        int intNum = 100;
        long longNum = intNum;  // int自动转换为long
        double doubleNum = intNum;  // int自动转换为double
        System.out.println("int转long: " + longNum);
        System.out.println("int转double: " + doubleNum);
        
        // 强制类型转换（大到小）
        double pi = 3.14159;
        int intPi = (int) pi;  // 强制转换，会丢失小数部分
        System.out.println("double转int: " + intPi);

        System.out.println("\n-----常量定义-----");
        // 使用final关键字定义常量
        final double PI = 3.14159;
        final int MAX_SIZE = 100;
        System.out.println("圆周率: " + PI);
        System.out.println("最大尺寸: " + MAX_SIZE);
        // PI = 3.14; // 编译错误！常量不能修改

        System.out.println("\n-----字符串操作-----");
        String str = "Hello World";
        System.out.println("原字符串: " + str);
        System.out.println("字符串长度: " + str.length());
        System.out.println("转大写: " + str.toUpperCase());
        System.out.println("转小写: " + str.toLowerCase());
        System.out.println("是否包含'World': " + str.contains("World"));
        System.out.println("替换'World'为'Java': " + str.replace("World", "Java"));
        System.out.println("获取子字符串: " + str.substring(0, 5));
        System.out.println("查找'o'的位置: " + str.indexOf('o'));
        
        // 字符串比较
        String str1 = "abc";
        String str2 = "abc";
        String str3 = new String("abc");
        System.out.println("str1 == str2: " + (str1 == str2));        // true
        System.out.println("str1 == str3: " + (str1 == str3));        // false
        System.out.println("str1.equals(str3): " + str1.equals(str3)); // true

        System.out.println("\n-----用户输入-----");
        // 使用Scanner类接收用户输入
        Scanner scanner = new Scanner(System.in);
        System.out.print("请输入您的姓名: ");
        String name = scanner.nextLine();
        System.out.print("请输入您的年龄: ");
        int age = scanner.nextInt();
        System.out.println("您好，" + name + "！您今年" + age + "岁。");
        
        // 关闭Scanner资源
        scanner.close();

        System.out.println("\n-----简单方法调用-----");
        // 调用自定义方法
        int sum = add(5, 3);
        System.out.println("5 + 3 = " + sum);
        
        printMessage("这是一个自定义方法");
        
        System.out.println("10的阶乘: " + factorial(5));
    }
    
    // 定义一个简单的加法方法
    public static int add(int a, int b) {
        return a + b;
    }
    
    // 定义一个输出消息的方法
    public static void printMessage(String message) {
        System.out.println("消息: " + message);
    }
    
    // 定义一个计算阶乘的方法
    public static int factorial(int n) {
        if (n <= 1) {
            return 1;
        }
        return n * factorial(n - 1);
    }
}